package com.xbongbong.paas.service;

import com.xbongbong.paas.pojo.dto.BatchEditDataPermissionDTO;
import com.xbongbong.paas.pojo.dto.DetailSpecialPermissionDTO;
import com.xbongbong.paas.pojo.dto.RoleAddDTO;
import com.xbongbong.paas.pojo.dto.RoleAppDetailDTO;
import com.xbongbong.paas.pojo.dto.RoleCopyDTO;
import com.xbongbong.paas.pojo.dto.RoleDataPermissionEditDTO;
import com.xbongbong.paas.pojo.dto.RoleDeleteDTO;
import com.xbongbong.paas.pojo.dto.RoleDetailDTO;
import com.xbongbong.paas.pojo.dto.RoleEditNameDTO;
import com.xbongbong.paas.pojo.dto.RoleListDTO;
import com.xbongbong.paas.pojo.dto.RoleModuleDetailDTO;
import com.xbongbong.paas.pojo.dto.RoleSaveDTO;
import com.xbongbong.paas.pojo.dto.SaveSpecialPermissionDTO;
import com.xbongbong.paas.pojo.vo.DetailSpecialPermissionVO;
import com.xbongbong.paas.pojo.vo.RoleAddVO;
import com.xbongbong.paas.pojo.vo.RoleAppDetailVO;
import com.xbongbong.paas.pojo.vo.RoleCopyVO;
import com.xbongbong.paas.pojo.vo.RoleDataPermissionEditVO;
import com.xbongbong.paas.pojo.vo.RoleDeleteVO;
import com.xbongbong.paas.pojo.vo.RoleDetailVO;
import com.xbongbong.paas.pojo.vo.RoleEditNameVO;
import com.xbongbong.paas.pojo.vo.RoleListVO;
import com.xbongbong.paas.pojo.vo.RoleModuleDetailVO;
import com.xbongbong.paas.pojo.vo.RoleSaveVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.role.pojo.dto.RoleAppendOrDeleteDTO;
import com.xbongbong.pro.role.pojo.dto.RoleRecoveryDTO;

/**
 * 角色服务逻辑
 * @author kaka
 * @time 2018-8-17
 */
public interface RoleService {

    /**
     * 获取角色列表，其中去除paasPermissions字段
     * @param roleListDTO 获取角色列表时的查询条件
     * @return 角色列表
     * @throws XbbException 业务异常
     */
    RoleListVO list(RoleListDTO roleListDTO) throws XbbException;

    /**
     * 删除角色
     * @param roleDeleteDTO 获取角色列表时的查询条件
     * @return 角色列表
     * @throws XbbException 业务异常
     */
    RoleDeleteVO delete(RoleDeleteDTO roleDeleteDTO) throws XbbException;

    /**
     * 新建角色，新建的角色权限为空
     * @param roleAddDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleAddVO add(RoleAddDTO roleAddDTO) throws XbbException;

    /**
     * 复制角色，复制的角色与被复制的角色权限相同
     * @param roleCopyDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleCopyVO copy(RoleCopyDTO roleCopyDTO) throws XbbException;

    /**
     * 获取角色清单
     * @param roleDetailDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    @Deprecated
    RoleDetailVO detail(RoleDetailDTO roleDetailDTO) throws XbbException;

    /**
     *  角色管理，获取某角色对应的应用权限情况，并对该角色是否具有应用列表中的应用的权限进行标记
     * @param roleAppDetailDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleAppDetailVO appDetail(RoleAppDetailDTO roleAppDetailDTO) throws XbbException;

    /**
     * 角色管理，获取某角色对应的应用权限情况， 用于批量修改数据权限
     * @param roleAppDetailDTO
     * @return
     * @throws XbbException
     */
    RoleAppDetailVO batchAppDetail(RoleAppDetailDTO roleAppDetailDTO) throws XbbException;

    /**
     * 角色管理，获取某角色对应的某应用的权限清单，并对该角色是否具有应用中的表单/报表的权限进行标记
     * @param roleModuleDetailDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleModuleDetailVO moduleDetail(RoleModuleDetailDTO roleModuleDetailDTO) throws XbbException;

    /**
     * 修改角色名称（目前兼容了新建角色[只填角色名]逻辑）
     * @param roleEditNameDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleEditNameVO editName(RoleEditNameDTO roleEditNameDTO) throws XbbException;

    /**
     * 修改角色数据权限，系统角色不能修改数据权限
     * @param dataPermissionEditDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleDataPermissionEditVO editDataPermission(RoleDataPermissionEditDTO dataPermissionEditDTO) throws XbbException;

    /**
     * Description: 批量修改数据权限
     * @param batchEditDataPermissionDTO
     * @return com.xbongbong.paas.toolbox.wrap.BaseVO
     * @author 魏荣杰
     * @date 2020/5/13 3:59 下午
     * @since permission-optimize
     */
    BaseVO batchEditDataPermission(BatchEditDataPermissionDTO batchEditDataPermissionDTO) throws XbbException;

    /**
     * 角色编辑保存
     * @param roleSaveDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    RoleSaveVO save(RoleSaveDTO roleSaveDTO) throws XbbException;

    /**
     * 特殊数据设置权限保存（组织架构）
     * @param saveSpecialPermissionDTO
     * @return
     * @throws XbbException
     */
    RoleSaveVO saveSpecial(SaveSpecialPermissionDTO saveSpecialPermissionDTO) throws XbbException;


    /**
     * Description:特殊数据设置权限回显
     * @param detailSpecialPermissionDTO
     * @return com.xbongbong.paas.pojo.vo.DetailSpecialPermissionVO
     * @throws
     * @author 魏荣杰
     * @date 2020/5/28 2:27 下午
     * @since
     */
    DetailSpecialPermissionVO detailSpecial(DetailSpecialPermissionDTO detailSpecialPermissionDTO) throws XbbException;

    /**
     * 系统角色还原，公司自定义角色没有还原功能
     * @param roleRecoveryDTO
     * @return
     * @throws XbbException
     */
    BaseVO recovery(RoleRecoveryDTO roleRecoveryDTO) throws XbbException;

    /**
     * 批量追加权限（用户存在A权限，则追加B权限）
     * @param roleAppendDTO
     * @return
     * @throws XbbException
     */
    BaseVO batchAppendOrDeletePermissions(RoleAppendOrDeleteDTO roleAppendDTO);
}
